﻿package Welsy4.Connect.business
{
	import flash.net.URLVariables;
	import Welsy4.Connect.vo.LoginVO;	
	import Welsy4.Connect.vo.User;
	import Welsy4.Connect.model.ConnectModel;	
	import com.adobe.cairngorm.business.ServiceLocator;	
	import mx.controls.Alert;
	import mx.rpc.AsyncToken;
	import mx.rpc.IResponder;
	import mx.rpc.http.HTTPService;
	
	public class AuthenticationDelegate
	{		
		private var responder : IResponder;
        private var service : Object;
                
        public function AuthenticationDelegate( responder : IResponder )
        {
            this.service = ServiceLocator.getInstance().getHTTPService("FakeAPI" );
            this.responder = responder;
        }
        
		/* Login 
		 * 
		 * @param nickname String
		 *     nickname used by Welsy
		 * 
		 * @return void
		 *     se non è un utente valido, è necessario procedere alla sua iscrizione mediante CreateUserDelegate
		 *     e solo in seguito validare l'utente. Così, ad esempio, facciamo gestire le funzioni utente all'utente
		 *     (vedere i propri meeting ecc...)
		 *     Per creare utenti bisogna avere privilegi di amministrazione
		 *     
		 *     Richiede ConnectModel.getInstance().sessionCookie, che si attiva inviando un CommonInfoCommand.
		 **/
		public function Login(nickname:String):void {
			
			var request:URLVariables = new URLVariables();
			ConnectModel.getInstance().sessionCookie = "";
			
			request.action   =  "login";
			request.login    =  nickname;
			request.password =  User.generatePassword(nickname);
			request.nocache  =  User.getLoginRequestlocaleTime();
			
			//Alert.show("AuthenticationDelegate.login : REQUESTED : " + nickname);
			
			var token : AsyncToken = HTTPService(service).send(request );
			token.addResponder(responder);
		}
		
		
		/**
		 *  Semplice funzione di logout. Annulla il coockie di sessione
		 */
		public function Logout():void {
			
			ConnectModel.getInstance().sessionCookie = "";
			
		    var token : AsyncToken = HTTPService(service).send(new URLVariables("action=logout&nocache="+User.getLoginRequestlocaleTime()));
			token.addResponder(responder);	
		}
		
		
		/**
		 * SecureLogin, o Login per l'Amministratore. Simile alla funzione Login(), però con credenziali amministrazione. Per gestire i meeting
		 * @param	nickname
		 * @param	password
		 */
		public function SecureLogin(nickname:String, password:String):void {
			
			var request:URLVariables = new URLVariables();
			
			request.session  =  ConnectModel.getInstance().sessionCookie;
			request.action   =  "login";
			request.login    =  nickname;
			request.password =  password;
			request.nocache  =  User.getLoginRequestlocaleTime();
			
			var token : AsyncToken = HTTPService(service).send(request );
			token.addResponder(responder);
		}
       
    }
}